import Vue from "vue";
export default {
	namespaced: true, // 命名空间必须写
	state: {
		socketTast: null,
		messageTotal: 0, // 未读消息总数
		notifyShow: false,
	},
	getters: {},
	// 唯一修改state值的方法 
	// commit
	mutations: {
		setMessageTotal(state, value) {
			state.messageTotal = value;
		},
		messageNotifyShow(state) {
			state.notifyShow = true;
			setTimeout(() => {
				state.notifyShow = false;
			}, 2500)
		},
	},
	// 异步的操作
	actions: {
		// 获取消息总数
		getMsgTotal({
			commit,
			dispatch
		}) {
			Vue.prototype.$get('userMessage/msgTotal').then(res => {
				commit('setMessageTotal', res.data.msgTotal);
			}).catch(ex => {
				Vue.prototype.$errorToast();
			})
		},
		websocketInit({
			state,
			rootState,
			dispatch,
			commit,
		}, url) {
			// 连接webSocket
			state.socketTast = uni.connectSocket({
				url, // url是websocket连接ip
				success: () => {
					// console.log('websocket连接成功！')
				},
				fail: e => {
					// console.log('连接失败' + e)
				}
			})
			state.socketTast.onOpen(function(res) {
				// console.log('WebSocket连接已打开！');
			})
			state.socketTast.onMessage(function(res) {
				// console.log('收到消息：' + res.data);
				// 字符串转json
				let data = JSON.parse(res.data);
				// console.log("data---------->", data) // 这里 查看 推送过来的消息
				if (data.type == 'init') { // 初始化
					var params = {
						type: 'bind',
					}
					params.sender_id = rootState.user.userInfo.id;
					// 发送用户绑定消息
					dispatch('websocketSend', params)
				} else {
					// #ifdef APP-PLUS
					// 系统提示音
					Vue.prototype.$messageSound();
					// 震动
					Vue.prototype.$vibrateLong();
					// #endif
					// console.log('data', data);
					state.messageTotal++;
					commit('messageNotifyShow');
					// 收到消息
					// that.$refs.chatMain.getInitMessage('push', [data]);
				}
				// that.handlerMsg(JSON.parse(res.data)) //这里是对获取到的数据进行操作
			});
			// state.socketTast.onOpen(() => dispatch('websocketOnOpen'))
			// state.socketTast.onMessage(res => dispatch('websocketOnMessage', res))
			// state.socketTast.onClose(e => dispatch('websocketOnClose'))
			// state.socketTast.onError(e => dispatch('websocketOnError'))
		},
		websocketClose({
			state,
		}) {
			state.socketTask.close({
				success(res) {
					state.socketTast = null;
				},
				fail(err) {}
			})
		},
		/**
		 * @description  打开webSocket
		 * 
		 * */
		websocketOnOpen({
			commit
		}) {
			// console.log('WebSocket连接正常打开中...！')
		},
		/**
		 * @description  收到数据
		 * 
		 * */
		websocketOnMessage({
			commit
		}, res) {
			// console.log('收到服务器内容：' + res.data)
			// 字符串转json
			let data = JSON.parse(res.data);
			// console.log("data---------->", data) // 这里 查看 推送过来的消息
			// if (data.type == 'init') { // 初始化
			// 	// 发送用户绑定消息
			// 	// that.sendSocketMessage('bind');
			// } else {
			// 	// 收到消息
			// 	// that.$refs.chatMain.getInitMessage('push', [data]);
			// }
			// if (res.data !== '连接成功') {
			// 	commit('setWebsocketData', (res && JSON.parse(res.data) || null))
			// }
		},
		/**
		 * @description  关闭WebSocket
		 * 
		 * */
		websocketOnClose({
			commit,
			dispatch
		}) {
			console.log('WebSocket连接关闭1')
		},
		/**
		 * @description  WebSocket连接错误
		 * 
		 * */
		websocketOnError({
			commit,
			dispatch
		}) {
			console.log('WebSocket连接错误')
		},
		/**
		 * @description  WebSocket连接错误
		 * 
		 * */
		websocketClose({
			state
		}) {
			if (!state.socketTast) return
			state.socketTast.close({
				success(res) {
					console.log('关闭成功', res)
				},
				fail(err) {
					console.log('关闭失败', err)
				}
			})
		},
		/**
		 * @description 发送数据
		 * 
		 * */
		websocketSend({
			state
		}, data) {
			data.sender_type = 1;
			// console.log('data', data)
			state.socketTast.send({
				data: JSON.stringify(data),
				success(res) {},
				fail(res) {
					console.log(res)
				}
			});
			// uni.sendSocketMessage({
			// 	data,
			// 	success: res => {
			// 		console.log('发送成功', res)
			// 	},
			// 	fail: e => {
			// 		console.log('发送失败', e)
			// 	}
			// })
		}
	}
}